iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
Mobile Development

iOS 工程師要懂的AR 開發,利用ARKit 製作APP系列 第 13

ARKit-讓我們開始偵測表面吧Part 5

  • 分享至 

  • xImage
  •  

最後最後, 讓我們來更新focus node 吧
添加一個 helper func

func updateFocusNode() {
  let results = self.sceneView.hitTest(self.focusPoint, types [.existingPlaneUsingExtent])
  if results.count == 1 {
    if let match = results.first {
      let transform = match.worldTransform
      self.focusNode.position = SCNVector3( 
                                    x: t.columns.3.x,
                                    y: transform.columns.3.y,
                                    z: transform.columns.3.z)
      self.gameState = .swipeToPlay
    }
} else { 
    self.gameState = .pointToSurface
  }
}

這裏sceneView.hitTest 測試我們的點擊射線,並設定這射線只有偵測 detected plane,並將所產生的結果存在results 參數中,再來將第一個 hit 結果,來更新 fucus node。從hit 結果包含一個worldTransform, 這是一個矩陣(包含位置, 方向, 與規模),利用這個參數進行focus node 的更新。如果這點擊沒有產生任何結果, 則會繼續指引使用者點到 detected plane

然後我們在renderer(_:updateAtTime)使用剛寫好的 updateFocusNode func

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
       updateFocusNode()
}

上一篇
ARKit-讓我們開始偵測表面吧Part 4
下一篇
ARKit-跟我們的物件來些互動 - part 1
系列文
iOS 工程師要懂的AR 開發,利用ARKit 製作APP25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言